package com.soft.link.controller.tsystem;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.util.StringUtil;
import com.soft.link.controller.BaseController;
import com.soft.link.model.TsRole;
import com.soft.link.model.TsUser;
import com.soft.link.model.TsUserRole;
import com.soft.link.service.TsRoleService;
import com.soft.link.service.TsUserRoleService;
import com.soft.link.utils.MsgEnum;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import java.util.Date;
import java.util.List;

/**
 * company 重庆庆云石油工程技术有限责任公司
 * FileName TsRoleController
 * Package com.soft.link.controller.tsystem
 * Description 角色控制层
 * author Administrator
 * create 2018-04-25 8:57
 * version V1.0
 */
@Controller
@RequestMapping("system/tsRole")
public class TsRoleController extends BaseController {
    private final String listTsRole = "tsystem/tsrole/listTsRole";
    private final String addTsRole = "tsystem/tsrole/addTsRole";
    private final String editTsRole = "tsystem/tsrole/editTsRole";
    @Autowired(required = false)
    TsRoleService tsRoleService;
    @Autowired(required = false)
    TsUserRoleService tsUserRoleService;

    /**
     * @methodname mainTsRole 角色列表数据
     * @Description 角色控制
     * @author 黄学乾
     * @create 2018/4/25/025 9:00 角色权限列表
     */
    @RequestMapping("/listTsRole")
    public ModelAndView listTsRole() {
        ModelAndView mainTsRole = new ModelAndView(listTsRole);

        return mainTsRole;
    }

    /**
     * @throws {如果有异常说明请填写}
     * @methodname ajaxListTsRole
     * @Description 列表查询方式
     * @author 黄学乾
     * @create 2018/4/25/025 9:16
     */
    @RequestMapping("/ajaxListTsRole")
    @ResponseBody
    public JSONObject ajaxListTsRole(TsRole tsRole) {
        JSONObject jsonObject = new JSONObject();
        try {
            jsonObject = tsRoleService.findTsRoleListPage(tsRole);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return jsonObject;
    }

    /**
     * @param * @param
     * @return
     * @throws {如果有异常说明请填写}
     * @methodname addTsRole
     * @Description {角色新增 }
     * @author 黄学乾
     * @create 2018/4/25/025 10:24
     */
    @RequestMapping("addTsRole")
    public ModelAndView addTsRole() {
        ModelAndView mainTsRole = new ModelAndView(addTsRole);
        return mainTsRole;
    }

    /**
     * @return
     * @throws {如果有异常说明请填写}
     * @methodname ajaxAddTsRole
     * @Description 新增角色，禁用角色
     * @author 黄学乾
     * @create 2018/4/25/025 16:26
     */
    @RequestMapping("ajaxAddTsRole")
    @ResponseBody
    public JSONObject ajaxAddTsRole(TsRole tsRole) {
        TsUser tsUser = getTsUser();
        // 设置修改人
        if (StringUtil.isEmpty(tsRole.getModifyerId())) {
            tsRole.setModifyerId(tsUser.getUserId());
            tsRole.setModifyer(tsUser.getUserName());
            tsRole.setModifyTime(new Date());
        }
        JSONObject jsonObject = new JSONObject();
        // 编辑
        if (StringUtils.isEmpty(tsRole.getRoleId())) {
            try {
                if (StringUtils.isEmpty(tsRole.getCreatorId())) {
                    tsRole.setCreatorId(tsUser.getUserId());
                    tsRole.setCreator(tsUser.getUserName());
                    tsRole.setCreateTime(new Date());
                }
                tsRoleService.saveTsRole(tsRole);
                jsonObject.put("status", true);
                jsonObject.put("msg", MsgEnum.Add_Success.getDesc());
            } catch (Exception e) {
                jsonObject.put("status", false);
                jsonObject.put("msg", MsgEnum.Add_False.getDesc() + e.getLocalizedMessage());
            }
        } else {
            // 修改
            try {
                tsRoleService.updateTsRole(tsRole);
                jsonObject.put("status", true);
                jsonObject.put("msg", MsgEnum.Add_Success.getDesc());
            } catch (Exception e) {
                jsonObject.put("status", false);
                jsonObject.put("msg", MsgEnum.Add_False.getDesc() + e.getLocalizedMessage());
            }
        }


        return jsonObject;
    }


    /**
     * @param
     * @methodname editTsRole
     * @Description {修改角色}
     * @author 黄学乾
     * @create 2018/4/27/027 9:49
     */
    @RequestMapping("editTsRole")
    public ModelAndView editTsRole(String roleId) {
        ModelAndView editTsRoleMv = new ModelAndView(editTsRole);
        if (StringUtils.isNotEmpty(roleId)) {
            TsRole tsRole = null;
            try {
                tsRole = tsRoleService.findTsRole(roleId);
            } catch (Exception e) {
                e.printStackTrace();
            }
            editTsRoleMv.addObject(tsRole);
        } else {

        }
        return editTsRoleMv;
    }


    /**
     * @param tsRoleList 删除角色信息，角色信息字符串
     * @throws {ajaxDelTsRole ： 删除角色信息 }
     * @methodname ajaxDelTsRole
     * @Description {角色删除，需要控制，该角色下是否有人员，然后再删除 }
     * @author 黄学乾
     * @create 2018/4/30/030 11:43
     */
    @RequestMapping("ajaxDelTsRole")
    @ResponseBody
    public JSONObject ajaxDelTsRole(String tsRoleList) {
        /**
         *  1、判断当前角色下，是否存在人员，如果存在人员，则不能进行删除，请清除人员角色关系后再进行删除
         */
        JSONObject jsonObject = new JSONObject();
        if (StringUtils.isNotEmpty(tsRoleList)) {
            List<TsRole> tsRoleL = JSON.parseArray(tsRoleList, TsRole.class);
            /* 查询当前角色下是否存在人员用户信息，如果存在则，不删除 */
            List<TsUserRole> tsUserRoleList = tsUserRoleService.findTsUserRoleListByTsRole(tsRoleL);
            if (tsUserRoleList != null && tsUserRoleList.size() > 0) {
                jsonObject.put("state", false);
                jsonObject.put("msg", MsgEnum.Conditions_Have_TsUser.getDesc());
            } else {
                try {
                    tsRoleService.deleteBatchByTsRole(tsRoleL);
                    jsonObject.put("state", true);
                    jsonObject.put("msg", MsgEnum.delete_Success.getDesc());
                } catch (Exception e) {
                    jsonObject.put("state", true);
                    jsonObject.put("msg", MsgEnum.delete_False.getDesc() + e.getLocalizedMessage());
                    logger.error("ajaxDelTsRole----->" + e.getLocalizedMessage());
                    e.printStackTrace();
                }
            }
        } else {
            logger.info("ajaxDelTsRole----->角色数据为空");
            jsonObject.put("state", false);
            jsonObject.put("msg", "角色信息数据为空");
        }

        return jsonObject;
    }


}
